<?php
	/**
	  * @package	MyTools
	  * @name		UrlValidator
	  * @brief		Clase para validar direcciones URL
	  * @author		Hermann D. Schimpf <hschimpf@gschimpf.com>
	  * @license	http://opensource.org/licenses/gpl-2.0.php
	  * @date		2009-12-30
	  * @version	0.2.2
  	**/

	final class UrlValidator extends MyDebuger implements MyData {
		/* version de la clase */
		private static $version			= 0;
		/* subversion de la clase */
		private static $subversion		= 2;
		/* numero de revision de la clase */
		private static $revision		= 2;

		/* expresion regular para validar direcciones URL */
		private static $urlExpresion = "/((\s+(http[s]?:\/\/)|(www\.))?(([a-z][-a-z0-9]+\.)?[a-z][-a-z0-9]+\.(([a-zA-Z]{2}|aero|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel)(\.[a-z]{2,2})?))\/?[a-z0-9._\/~#&=;%+?-]+[a-z0-9\/#=?]{1,1})/is";

		public function __construct($debug = False) {
			/* creamos el padre */
			parent::__construct($debug, __CLASS__);
		}

		public static final function getVersion() {
			/* retornamos la version actual de la clase */
			return 'v' . self::$version . '.' . self::$subversion . '.' . self::$revision;
		}

		public static final function validateUrl($url = Null, $debug) {
			try {
				try {
					/* creamos la instancia */
					$validateUrl = new UrlValidator($debug);
					/* mostramos un mensaje */
					$validateUrl->show('Verificando cadena de direccion URL..', False);
					/* verificamos si ingreso algo */
					if ($url === Null)
						/* salimos con una excepcion */
						$validateUrl->newException('No se especifico la cadena a validar');
					/* verificamos que la cadena sea un string */
					if (gettype($url) != 'string')
						/* salimos con una excepcion */
						$validateUrl->newException('La cadena a validar debe ser un string');
					/* mostramos ok al mensaje */
					$validateUrl->showOK();
					/* mostramos la cadena a validar */
					$validateUrl->show('Validando direccion URL ' . $validateUrl->italic($url) . '..', False);
					/* mostramos el resultado */
					$validateUrl->show(preg_match(self::$urlExpresion, $url) ? ' OK' : ' Invalid');
						/* retornamos si la URL es valida */
					return (
						/* verificamos si es una URL valida */
						preg_match(self::$urlExpresion, $url) ?
						/* retornamos true */
						True :
						/* retornamos false */
						False
					);
				} catch (Exception $e) {
					/* capturamos todos los errores y los transformamos en mi excepcion */
					$validateUrl->convertToMyException($e);
				}
			} catch (MyException $e) {
				/* si se produjo una excepcion la manejamos con el metodo 'show' */
				$validateUrl->show($e->getMensaje());
			}
		}
	}
?>